# Create your views here.

from django.shortcuts import get_object_or_404, render_to_response
from django.http import HttpResponseRedirect, HttpResponse
from django.utils.encoding import smart_str, smart_unicode
from django.core.urlresolvers import reverse
from django.template import RequestContext
from django.db.models import Q, Max, Min, Count
from contestar.models import *
from registro.models import *
from cuestionarios.models import *
from usuarios.models import *
from datetime import *

def index(request):
    if not "user" in request.COOKIES:
        return HttpResponseRedirect('/')
    
    if "sesid" in request.COOKIES:
        respuestas=[]
        cuestionarios_respondidos=[]
        seciones = SesionesDeCuestionarios.objects.filter(cliente=request.COOKIES["user"])
        userpermisos=UserPermisos.objects.get(user=request.COOKIES["user"])
        permisos['issueper']=usuario.is_superuser
        permisos['isadmin']=userpermisos.admin
        permisos['isdevelp']=userpermisos.supervisor
        permisos['isdevelp']=userpermisos.experto   
        #saco las respuestas del usuario para despues saber cuales cuestionarios ya contesto y no volver a mostrar
        
        for i in seciones:
            for y in i.opciones.all():
                respuestas.append(y.pk)
                
        respuestas_dadas=ElementoDeCuestionario.objects.filter(pk__in=respuestas)
        for i in respuestas_dadas:
            cuestionarios_respondidos.append(i.cuestionario)
            
        #selecciono los cuestionarios que esten activos y no fueron contestados contestados por el usuario 
        
        cuestionarios_activos=Cuestionario.objects.filter(~Q(nombre__in=cuestionarios_respondidos) & Q(activo = TRUE))
        
    #cuestionarios_activos = Cuestionario.objects.filter(activo=1)
    
    return render_to_response('contestar/index.html',{'cuestionarios_disponibles': cuestionarios_activos})

def inicio_secion(request, cuestionario_id):
    if 'user' in request.COOKIES:
        userid= request.COOKIES.get("user", '')
        sesion = SesionesDeCuestionarios(cliente_id=userid, fecha = datetime.now())
        sesion.save()
        response=HttpResponseRedirect(reverse(preguntas, args=[cuestionario_id, 1]))
        response.set_cookie("sesid", int(sesion.id), 365*24*60*60)
        return response

def preguntas(request, cuestionario_id, nro_pregunta):
    selected_opcion=-1
    pregunta_activado=True
    idsesion=-1
    try:
    #busco la respuesta en el POST para guardar en la BD
        if 'respuestas' in request.POST and request.POST['respuestas']:
            selected_opcion = request.POST['respuestas']
            
            if "sesid" in request.COOKIES:
                idsesion = request.COOKIES.get("sesid", '')
                
            respuesta=SesionesDeCuestionarios.objects.get(id=idsesion)
            respuesta.opciones.add(selected_opcion)
            respuesta.save()
        
        while(pregunta_activado):
            c = Pregunta.objects.get(cuestionario=cuestionario_id, numero = nro_pregunta)
            if(c.grupo_id==None): #si la pregunta no pertenece a ningun grupo entonces se evalua la regla de la pregunta
                if (c.evaluar_regla(idsesion)):#si la pregunta esta activa entonces se despliega
                    elemento_pregunta=ElementoDeCuestionario.objects.get(id=c.elementodecuestionario_ptr_id)
                    activado=ElementosAcTemp(elemento_activo=elemento_pregunta)
                    activado.save()
                    pregunta_activado=False
                    
                else: #si no se salta a la siguiente pregunta
                    nro_pregunta= int(nro_pregunta) + 1
                    
            else: #si es que la pregunta petenece a un grupo evalua el grupo
                grupo=GrupoDePreguntas.objects.get(pk=c.grupo_id)
                if(grupo.evaluar_regla(idsesion)):
                    if (c.evaluar_regla(idsesion)):
                        elemento_grupo=ElementoDeCuestionario.objects.get(id=c.grupo_id)
                        activado=ElementosAcTemp(elemento_activo=elemento_grupo)
                        activado.save()
                        pregunta_activado=False
                    else:
                        nro_pregunta= int(nro_pregunta) + 1
                    
                else:#si es que el grupo no esta activo entonces se busca la siguiente pregunta que no pertenece al grupo
                    c=Pregunta.objects.filter(~Q(grupo=c.grupo)& Q(cuestionario=c.cuestionario), numero__gt = c.numero).aggregate(Min('numero'))
                    nro_pregunta=c['numero__min']
                    
        #elemento_pregunta=ElementoDeCuestionario.objects.get(id=c.elementodecuestionario_ptr_id)
        
    except Pregunta.DoesNotExist:
        return  render_to_response('contestar/fincuestionario.html')
    else:
        elementocuestionario=ElementoDeCuestionario.objects.filter(cuestionario=cuestionario_id)
        o = Opcion.objects.filter(pk__in=elementocuestionario,pregunta=c.pk)
        elemento_opciones=ElementoDeCuestionario.objects.filter(pk__in=o)
        opciones=[]
        # idsesion=''
        for i in o:
            if(i.grupo==None):
                if (i.evaluar_regla(idsesion) == True):
                    opciones.append([(i.pk), i.texto])
            else:
                grupo_opciones=GrupoDeOpciones.objects.get(id=i.grupo_id)
                if (grupo_opciones.evaluar_regla(idsesion) == True):
                    opciones.append([(i.pk), i.texto])
            # opciones.append([str(i.pk), str(i)])
        
        siguiente = int(nro_pregunta) + 1
       
        return render_to_response('contestar/cuestionario.html', {
            'cuest_id':cuestionario_id,
            'cuestionario': c, 
            'opciones': opciones,
            'siguiente': siguiente,
            'selected': selected_opcion,
            },context_instance=RequestContext(request))

def eleccion(request):
    
    return 0
def fin(request):
    responsen = HttpResponseRedirect('contestar/fincuestionario.html')
    if 'sesid' in request.COOKIES:
        responsen.delete_cookie("sesid")
    return  responsen
